<?php

namespace app\official\controller;

use mikkle\tp_wechat\base\BaseWechatApi;
use mikkle\tp_wechat\Wechat;

class Index extends BaseWechatApi
{

    public function __construct()
    {
        parent::__construct();
        // 获取config表的网站域名的值 => config配置

        $this->cdn = config('cdn');
    }

    protected $valid = false;  //网站第一次匹配 true 1为匹配
    protected $isHook = false; //是否开启钩子


    public function auth()
    {
        //调用父级的方法
        $this->index();
        $Subscribe = $this->returnEventSubscribe();
        $this->weObj->text($Subscribe)->reply();
    }

    // 默认关注回复信息
    protected function returnEventSubscribe()
    {
        $message = "欢迎来到ATHENask论坛\n使用帮助\n1、发送城市名称，可搜索天气\n2、发送预约单号，可搜索预约进度\n3、发送商品订单号，可搜索商品订单进度\n4、发送悬赏问题，可查看解决方案(提问：关键词)";

        return ['type' => 'text', 'message' => $message];
    }

    //自定义菜单
    // 自定义菜单
    public function menu()
    {
        $button = [
            'button' => [
                [
                    'type' => 'view',
                    'name' => 'ASK论坛',
                    'url' => 'http://www.phpask.athen.ltd.com/'
                ],
                [
                    'type' => 'view',
                    'name' => '百度',
                    'url' => 'http://www.baidu.com'
                ],
                [
                    "name" => "发送位置",
                    "type" => "location_select",
                    "key" => "rselfmenu_2_0"
                ]
            ]
        ];

        $MenuJson = json_encode($button, JSON_UNESCAPED_UNICODE);

        $result = Wechat::menu()->createMenu($MenuJson);

        if ($result === FALSE) {
            echo '更新自定义菜单失败';
        } else {
            echo '更新自定义菜单成功';
        }
    }
    //自动回复
    protected function returnMessageText()
    {
        $keyword = $this->weObj->getRevContent();

        $helpList = [1, 'h', 'help', '帮助'];

        if (in_array($keyword, $helpList)) {
            return "使用帮助\n1、发送城市名称，可搜索天气\n2、发送预约单号，可搜索预约进度\n3、发送商品订单号，可搜索商品订单进度\n4、发送悬赏问题，可查看解决方案(提问：关键词)";
        }
        // $this->we_dump($keyword);
        // 提问：vue
        if (stripos($keyword, '提问') !== FALSE) {
            // 不管接收是:还是：都替换成:
            $keyword = preg_replace('/:|：/', ':', $keyword);

            // $this->we_dump($keyword);
            // 字符串转成数组
            $arr = explode(':', $keyword);

            // 提问：vue => ['提问','vue']
            $title = isset($arr[1]) ? $arr[1] : '';

            if (empty($title)) {
                return '请输入需要提问关键字';
            }
            // 组装查询条件
            $where['title'] = ['like', "%$title%"];
            // 查询
            $PostList = model('Post.Post')->where($where)->limit(5)->select();

            // file_put_contents('./demo.txt',$PostList);

            // $this->we_dump($PostList);

            return $this->returnMessageImage($PostList);
        }

        //搜索天气
        if (stripos($keyword, '天气') !== FALSE) {
            // $preg = "/(.*)天气/";

            // preg_match($preg,$keyword,$result);

            // $this->we_dump($result);

            // 广州天气 => 把天气两个字去掉 => 广州
            $city = preg_replace('/天气/', '', $keyword);

            // 拼接Api地址
            $url = "https://api.asilu.com/weather/?city=$city";

            $json = file_get_contents($url);

            $data = json_decode($json, true);

            $list = isset($data['weather']) ? $data['weather'] : [];

            if (empty($list)) {
                return '该城市暂无数据';
            }

            // 城市：
            // 未来4天天气情况：
            //     周四 11月14日：晴、南风3-4级、17 ~ 6℃
            //     周四 11月14日：晴、南风3-4级、17 ~ 6℃
            //     周四 11月14日：晴、南风3-4级、17 ~ 6℃
            //     周四 11月14日：晴、南风3-4级、17 ~ 6℃

            $output = "{$city}：\n一周天气情况：\n";

            foreach ($list as $item) {
                // 日期
                $date = $item['date'];
                // 天气情况
                $weather = $item['weather'];
                // 风向风级
                $wind = $item['wind'];
                // 温度
                $temp = $item['temp'];

                $output .= "$date : $weather 、$wind 、$temp\n\n";
            }

            return $output;
        }
    }

    protected function returnMessageImage($data = [])
    {
        // 定义新的数组
        $newArray = [];
        // 如果数组不为空
        if (!empty($data)) {
            // 拼接图片
            $pic = $this->cdn . "/static/home/res/images/logo.png";
            foreach ($data as $item) {
                $newArray[] = [
                    // 拼接图片
                    'Title' => $item['title'],
                    // 简介
                    'Description' => $item['title'],
                    'PicUrl' => $pic,
                    // 'Url' => $this->request->domain(),
                    //带上域名
                    // 带上域名 => 点击跳转地址
                    'Url' => url('home/index/info', ['postid' => $item['id']], true, true),
                ];
            }
        } else {
            $newArray = [];
        }

        //开发者限制只能发送一条图文信息
        // 开发者限制 每次推送只能发送一条图文信息
        $reply = ['type' => 'news', 'message' => $newArray];

        return $reply;
    }

    public function send()
    {
        if (request()->isPost()) {
            $params = request()->param();

            $data = [
                'touser' => $params['touser'],
                'template_id' => 'FiuVwjh_1QiySgYXcuVGFuEDMYhVjQLgm-5SsdEN2LU',
                'url' => 'http://www.k2215ask.zmlover.cn/',
                'data' => [
                    'first' => [
                        'value' => '您好，您的订单已配送',
                        'color' => '#173177'
                    ],
                    'code' => [
                        'value' => $params['code'],
                        'color' => '#173177'
                    ],
                    'express' => [
                        'value' => $params['express'],
                        'color' => '#173177'
                    ],
                    'expcode' => [
                        'value' => $params['expcode'],
                        'color' => '#173177'
                    ],
                    'user' => [
                        'value' => $params['user'],
                        'color' => '#173177'
                    ],
                    'tel' => [
                        'value' => $params['tel'],
                        'color' => '#173177'
                    ],
                ]
            ];

            $dataJson = json_encode($data, JSON_UNESCAPED_UNICODE);

            $result = Wechat::message()->sendTemplateMessage($dataJson);

            if ($result === FALSE) {
                echo '发送失败';
                exit;
            } else {
                echo '发送成功';
                exit;
            }
        }
        return view();
    }
}
